package com.hnchances.studentscoresystem.dto.response;

import lombok.Data;

/**
 * 统一响应DTO
 * 所有接口的返回结果均通过此类封装，格式：{"code":200,"msg":"操作成功","result":{...}}
 */
@Data
public class CommonResponse<T> {

    /**
     * 状态码：200-成功，400-业务异常，500-系统异常（可扩展更多错误码）
     * 约束：非空，与文档中“接口返回格式”的code字段对齐
     */
    private int code;

    /**
     * 提示信息：成功/失败原因（如“登录成功”“参数错误”）
     * 约束：非空，与文档中“接口返回格式”的msg字段对齐
     */
    private String msg;

    /**
     * 业务数据：接口实际返回的业务内容（如用户信息、成绩列表）
     * 约束：可空，与文档中“接口返回格式”的result字段对齐，泛型支持任意类型
     */
    private T result;

    // ====================== 快捷构造方法 ======================

    /**
     * 成功响应（无业务数据）
     */
    public static <T> CommonResponse<T> success() {
        CommonResponse<T> response = new CommonResponse<>();
        response.setCode(200);
        response.setMsg("操作成功");
        return response;
    }

    /**
     * 成功响应（带业务数据）
     */
    public static <T> CommonResponse<T> success(T result, String msg) {
        CommonResponse<T> response = new CommonResponse<>();
        response.setCode(200);
        response.setMsg(msg);
        response.setResult(result);
        return response;
    }

    /**
     * 失败响应（业务异常）
     */
    public static <T> CommonResponse<T> fail(int code, String msg) {
        CommonResponse<T> response = new CommonResponse<>();
        response.setCode(code);
        response.setMsg(msg);
        return response;
    }

    /**
     * 系统异常响应
     */
    public static <T> CommonResponse<T> systemError() {
        return fail(500, "系统异常，请联系管理员");
    }
}